package org.p2psimulator.analysis.jfreechart;


import java.awt.HeadlessException;


import java.awt.*;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.Dataset;

public class BarChartBoard extends ChartBoard {
	private static final long serialVersionUID = 1L;

	public BarChartBoard(String title, CategoryDataset dataset, String xlabel,
			String ylabel) throws HeadlessException {

		super(title, dataset, xlabel, ylabel);
	}

	public JFreeChart createChart(Dataset dataset, String xlabel,
			String ylabel) {
		JFreeChart chart = ChartFactory.createBarChart(super.getTitle(), // chart// title
				xlabel, // domain axis label
				ylabel, // range axis label
				(CategoryDataset)dataset, // data
				PlotOrientation.VERTICAL, true, // include legend
				true, // tooltips?
				false // URLs?
				);
		// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
		// set the background color for the chart...
		chart.setBackgroundPaint(Color.white);
		// get a reference to the plot for further customisation...
		CategoryPlot plot = chart.getCategoryPlot();
		plot.setBackgroundPaint(Color.lightGray);
		plot.setDomainGridlinePaint(Color.white);
		plot.setDomainGridlinesVisible(true);
		plot.setRangeGridlinePaint(Color.white);
		// set the range axis to display integers only...
		final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
		// disable bar outlines...
		BarRenderer renderer = (BarRenderer) plot.getRenderer();
		renderer.setDrawBarOutline(false);
		// set up gradient paints for series...
		GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f,
				0.0f, Color.blue);
		GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f,
				0.0f, Color.red);
		renderer.setSeriesPaint(0, gp0);
		renderer.setSeriesPaint(1, gp1);
		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setCategoryLabelPositions(CategoryLabelPositions
				.createUpRotationLabelPositions(Math.PI / 6.0));

		return chart;
	}

}
